package zuoye4;

import java.io.*;
import java.util.*;


/*1） 完善Staff对象，并使其能使用对象序列化机制。
2） 利用ObjectOutputStream 存入两个Staff对象， 然后使用
ObjectInputStream 读出这两个对象，并打印这两个对象的信息。
3） 写一个方法saveStaffToFile(Staff staff, File file)，该方法完成下面的
功能：
假设有一个Staff对象w1，File 对象f1 如下：
Staff staff = new Staff("Tom", 30, 5000);
File file = new File(“test.txt”);
则调用saveStaffToFile(staff, file)，会在test.txt 中增加一行：
Tom/30/5000
4） 写一个方法List<Staff> readStaffFromFile(File file)，该方法读某
个文件，从文件信息中创建一个Staff 类型的List。
例如，假设文件内容如下：
Tom/30/5000
Jim/25/3000
Terry/33/4500
则返回一个包含三个Staff 对象的List。*/
public class Test {
    public static List<Staff>readffFromFile(File file){
        BufferedReader bfr=null;
        FileReader fr=null;
        String temp=null;
        List<Staff>list=new ArrayList<>();
        Staff staff=null;
        try {
            fr=new FileReader(file);
            bfr=new BufferedReader(fr);
            temp=bfr.readLine();
            while (temp != null) {
                staff = new Staff(temp.substring(0,temp.indexOf("/")),Integer.parseInt(temp.substring(temp.indexOf("/") + 1 ,temp.lastIndexOf("/"))),Double.parseDouble(temp.substring(temp.lastIndexOf("/") + 1)));
                list.add(staff);
                temp=bfr.readLine();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fr.close();
                bfr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return  list;
    }
    public static void saveStaffToFile(Staff w1, File f1){
        BufferedWriter bfw = null;
        FileWriter fw = null;
        String temp = null;
        try {
            fw= new FileWriter(f1);
            bfw = new BufferedWriter(fw);
            temp = w1.toString().replace(",age:","/");//把"/"进行替换，得到新的字符串
            temp = temp.replace(",salsry:","/");
            temp = temp.substring(5);
            bfw.write(temp);//写入到文件中
            bfw.flush();
            bfw.close();
            fw.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) throws IOException, ClassNotFoundException {
                ObjectOutputStream oos = null;
                ObjectInputStream ois = null;
                Staff tom = null;
                Staff jney = null;
               ArrayList<Staff> outputList = new ArrayList<>();
                File f = new File("D:/excel/test.txt");
                try {
                        oos = new ObjectOutputStream(new FileOutputStream("D:/excel/staff"));
                        tom = new Staff("tom", 28, 4000);
                        jney = new Staff("jney", 25, 4500);
                        outputList.add(tom);
                       outputList.add(jney);
                       oos.writeObject(outputList);
                       saveStaffToFile(tom,f);
                   } catch (IOException e) {
                        e.printStackTrace();
                   } finally {
                        oos.close();
                        oos = null;
                   }
                ois = new ObjectInputStream(new FileInputStream("D:/excel/staff"));
                ArrayList<Staff> inputList = (ArrayList<Staff>) ois.readObject();
               //读入对象时，直接读取所有的对象
                        //Staff employee = (Staff) ois.readObject();
                                for (Staff employee : inputList
                        ) {
                       System.out.println(employee.toString());
                   }
                File file2 = new File("D:/excel/test2.txt");
                List<Staff> list = new ArrayList<>();
                list = readffFromFile(file2);
               for (Staff staff:list
                             ) {
                        System.out.println(staff.toString());
                  }
           }
}
